package com.skyMailbox.service.managers.impl;

import com.skyMailbox.service.managers.IManagerHelper;
import com.skyMailbox.webService.*;
import org.directwebremoting.annotations.RemoteMethod;
import org.directwebremoting.annotations.RemoteProxy;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpSession;
import java.sql.Array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

@Service
@RemoteProxy(name = "managerHelper")
public class ManagerHelper implements IManagerHelper {


    // ZONAS



    @RemoteMethod
    public Zona getZonaById(int id) {
        UPSAMService service = new UPSAMService();
        UPSAM movil = service.getUPSAMPort();
        List<Zona> list = getAllZonas();
        for (Zona zona : list) {
            if(zona.getId().equals(id))
            return zona;
        }
        return null;
    }
    @RemoteMethod
    public List<Zona> getAllZonas() {

        UPSAMService service = new UPSAMService();
        UPSAM movil = service.getUPSAMPort();
        List<Object> listaZonas = movil.getAllZona();
        List<Zona> zonas = new ArrayList<Zona>();
        for (Object z : listaZonas) {
            Zona zona = (Zona) z;
            zonas.add(zona);
        }
        return zonas;
    }

    @RemoteMethod
    public boolean salvarZona(Zona zona) {

        UPSAMService service = new UPSAMService();
        UPSAM movil = service.getUPSAMPort();
        return movil.insertZona(zona, new ArrayList(zona.getPuntoList()));
    }

    @RemoteMethod
    public boolean deleteZona(Zona zona) {
        UPSAMService service = new UPSAMService();
        UPSAM movil = service.getUPSAMPort();
        return movil.deleteZona(zona.getId());
    }

    @RemoteMethod
    public boolean existeZona(Zona zona) {
        UPSAMService service = new UPSAMService();
        UPSAM movil = service.getUPSAMPort();
        return movil.getZonaByName(zona.getNombre()) != null;
    }


    // USUARIOS

    public List<Usuario> getAllUsuario() {
        UPSAMService service = new UPSAMService();
        UPSAM movil = service.getUPSAMPort();
        List<Object> listaZonas = movil.getAllGrupos();
        // todo cambiar poe la llamda a getAllUsuarios
        List<Zona> zonas = new ArrayList<Zona>();
        for (Object z : listaZonas) {
            Zona zona = (Zona) z;
            zonas.add(zona);
        }
        return null;
    }

    public boolean salvarUsuario(Usuario usuario) {
        UPSAMService service = new UPSAMService();
        UPSAM movil = service.getUPSAMPort();
        return movil.insertUsuario(usuario, null);
    }

    public boolean deleteUsuario(Usuario usuario) {
        UPSAMService service = new UPSAMService();
        UPSAM movil = service.getUPSAMPort();
        return movil.deleteUsuario(usuario.getId());
    }

    public boolean exiteUsuario(Usuario usuario) {
        UPSAMService service = new UPSAMService();
        UPSAM movil = service.getUPSAMPort();
        Usuario usuario2 = movil.validacionUsuario(usuario);
        return (usuario2 != null);
    }


    // GRUPOS

    public List<Grupo> getAllGrupos() {
        UPSAMService service = new UPSAMService();
        UPSAM movil = service.getUPSAMPort();
        List<Object> listaGrupo = movil.getAllGrupos();
        List<Grupo> grupos = new ArrayList<Grupo>();
        for (Object z : listaGrupo) {
            grupos.add((Grupo) z);
        }
        return grupos;
    }

    public boolean salvarGrupo(Grupo grupo) {
        UPSAMService service = new UPSAMService();
        UPSAM movil = service.getUPSAMPort();
        return movil.insertGrupo(grupo);
    }

    public boolean deleteGrupo(Grupo grupo) {
        UPSAMService service = new UPSAMService();
        UPSAM movil = service.getUPSAMPort();
        return movil.deleteGrupo(grupo.getId());
    }

    public boolean exiteGrupo(Grupo grupo) {
        UPSAMService service = new UPSAMService();
        UPSAM movil = service.getUPSAMPort();
        List<Object> grupos = movil.getAllGrupos();
        for (Object o : grupos) {
            Grupo grup = (Grupo) o;
            if (grup.getNombre().equalsIgnoreCase(grupo.getNombre()))
                return true;
        }
        return false;
    }
}
